package com.hpf.tool.utils;

import java.math.BigDecimal;
import java.math.MathContext;

/**
 * 金额计算
 * @author houbinfei
 *
 */
public final class UtilsMoney {
	
	/**
	 * 加法 return double
	 * @param a 加数
	 * @param b 被加数
	 * @return
	 */
	public static double addToDouble(double a,double b) {
		/**
		 *  a + b
		 */
		return addToDecimal(a, b).doubleValue();
	}
	
	/**
	 * 加法 return BigDecimal
	 * @param a 加数
	 * @param b 被加数
	 * @return
	 */
	public static BigDecimal addToDecimal(double a,double b) {
		/**
		 *  a + b
		 */
		return new BigDecimal(a,MathContext.DECIMAL32).add(new BigDecimal(b,MathContext.DECIMAL32));
	}
	
	
	/**
	 * 减法 return BigDecimal
	 * @param a 减数
	 * @param b 被减数
	 * @return
	 */
	public static BigDecimal subtractToDecimal(double a,double b) {
		/**
		 *  a - b
		 */
		return new BigDecimal(a,MathContext.DECIMAL32).subtract(new BigDecimal(b,MathContext.DECIMAL32));
	}
	
	/**
	 * 减法 return Double
	 * @param a 减数
	 * @param b 被减数
	 * @return
	 */
	public static double subtractToDouble(double a,double b) {
		/**
		 *  a - b
		 */
		return subtractToDecimal(a,b).doubleValue();
	}
	
	/**
	 * 乘法计算
	 * @param a
	 * @param b
	 * @return
	 */
	public static BigDecimal multiplyToDecimal(Number a,Number b){
		if(a == null){
			a = 0.0D;
		}
		if(b == null){
			b = 0.0D;
		}
		/**
		 * a * b
		 */
		return new BigDecimal(a.doubleValue(),MathContext.DECIMAL32).multiply(new BigDecimal(b.doubleValue(),MathContext.DECIMAL32));
	}
	
	
	/**
	 * 乘法计算
	 * @param a
	 * @param b
	 * @return
	 */
	public static double multiplyToDouble(double a,double b){
		/**
		 * a * b
		 */
		return multiplyToDecimal(a,b).doubleValue();
	}
	
	public static void main(String[] args) {
		System.out.println(UtilsMoney.addToDouble(12, 21.5));
		
		System.out.println(UtilsMoney.subtractToDouble(12, 21.5));
	}
}
